package cashback

import (
	"time"
)

// CashbackRates 返现比例配置结构体
type CashbackRates struct {
	FirstYearRate  float64
	SecondYearRate float64
	ThirdYearRate  float64
	FourthYearRate float64
	FifthYearRate  float64
	ShareRate      float64
}

// DefaultRates 默认返现比例配置
var DefaultRates = CashbackRates{
	FirstYearRate:  1.0,  // 第一年返现比例 100%
	SecondYearRate: 0.2,  // 第二年返现比例 20%
	ThirdYearRate:  0.2,  // 第三年返现比例 20%
	FourthYearRate: 0.6,  // 第四年返现比例 60%
	FifthYearRate:  1.0,  // 第五年返现比例 100%
	ShareRate:      0.05, // 分享返现比例 5%
}

// getDaysInMonth 获取指定月份的天数
func getDaysInMonth(date time.Time) int {
	year := date.Year()
	month := date.Month()
	return time.Date(year, month+1, 0, 0, 0, 0, 0, time.Local).Day()
} //通过将日期设置为下一个月的0日（即当前月的最后一天），然后获取这一天的 Day 值，来计算当前月的天数。

// CalculateInstallmentCashback 计算分期返现金额
func CalculateInstallmentCashback(year int, annualFee float64, hasRenewal bool, rates CashbackRates, orderDate time.Time) float64 {
	if (year == 4 || year == 5) && !hasRenewal {
		return 0
	}

	var rate float64
	switch year {
	case 1:
		rate = rates.FirstYearRate
	case 2:
		rate = rates.SecondYearRate
	case 3:
		rate = rates.ThirdYearRate
	case 4:
		rate = rates.FourthYearRate
	case 5:
		rate = rates.FifthYearRate
	default:
		return 0 //如果年份是第4年或第5年且用户没有续约，则返回0，表示没有返现
	}

	return annualFee * rate
}

// CalculateDailyCashback 计算每日返现金额
func CalculateDailyCashback(amount float64, date time.Time) float64 {
	daysInMonth := getDaysInMonth(date)
	return amount / float64(daysInMonth)
}

// CalculateShareCashback 计算分享返现金额
func CalculateShareCashback(totalAmount float64, rates CashbackRates) float64 {
	return totalAmount * rates.ShareRate
}
